#include<bits/stdc++.h>
#define N 640005
#define fi first
#define se second
#define int long long 
using namespace std;
vector<pair<int,int>>G[N];
int dep[N],siz[N],dis[N],son[N];
int Tp[N];
int ffa[N];
int n,m,q;
void ad(int x,int y,int w)
{
    G[x].push_back(make_pair(y,w));
}
void dfs(int k,int fa)
{
    ffa[k]=fa;
    dep[k]=dep[fa]+1;
    siz[k]=1;
    for (auto U:G[k])
    {
        int u=U.fi,w=U.se;
        if (u==fa) continue;
        dis[u]=dis[k]+w;
        dfs(u,k);
        siz[k]+=siz[u];
        if (siz[u]>siz[son[k]]) son[k]=u;
    }
}
void dfs1(int k,int tp)
{
    Tp[k]=tp;
    if (son[k]) dfs1(son[k],tp);
    for (auto U:G[k])
    {
        int u=U.fi,w=U.se;
        if (u==ffa[k]||u==son[k]) continue;
        dfs1(u,u);
    }
}
int lca(int x,int y)
{
    while (Tp[x]!=Tp[y])
    {
        if (dep[Tp[x]]<dep[Tp[y]]) swap(x,y);
        x=ffa[Tp[x]];
    }
    if (dep[x]<dep[y]) return x;
    return y;
}
signed main()
{
    freopen("simple.in","r",stdin);
    freopen("simple.out","w",stdout);
    ios::sync_with_stdio(false);
    cin>>n>>m>>q;
    for (int i=1;i<=m;i++)
    {
        int x,y,w;
        cin>>x>>y>>w;
        ad(x,y,w);
        ad(y,x,w);
    }
    for (int i=1;i<=n;i++) dis[i]=-1;
    dis[1]=0;
    dfs(1,0);
    dfs1(1,1);
    for (int i=1;i<=q;i++)
    {
        int s,t;
        cin>>s>>t;
        int z=lca(s,t);
        cout<<(dis[s]+dis[t]-dis[z]*2)%998244353<<endl;
    }
}
